www.gusucode.com > vc++ 远程控制示例源程序-源码程序 > vc++ 远程控制示例源程序-源码程序\code\PeerYouC\PeerHostTreeView.cpp
// PeerHostTreeView.cpp : implementation file // Download by http://www.NewXing.com #include "stdafx.h" #include "PeerYouC.h" #include "PeerHostTreeView.h" #include "mainfrm.h" #include "peerregeditlistview.h" #include "peerregedittreeview.h" #include "peerfilelistview.h" #include "peerfileremotelistview.h" #include "command.h" #include "peersocket.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPeerHostTreeView IMPLEMENT_DYNCREATE(CPeerHostTreeView, CTreeView) CPeerHostTreeView::CPeerHostTreeView() { } CPeerHostTreeView::~CPeerHostTreeView() { } BEGIN_MESSAGE_MAP(CPeerHostTreeView, CTreeView) //{{AFX_MSG_MAP(CPeerHostTreeView) ON_WM_CREATE() ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPeerHostTreeView drawing void CPeerHostTreeView::OnDraw(CDC* pDC) { CDocument* pDoc = GetDocument(); // TODO: add draw code here } ///////////////////////////////////////////////////////////////////////////// // CPeerHostTreeView diagnostics #ifdef _DEBUG void CPeerHostTreeView::AssertValid() const { CTreeView::AssertValid(); } void CPeerHostTreeView::Dump(CDumpContext& dc) const { CTreeView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CPeerHostTreeView message handlers int CPeerHostTreeView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CTreeView::OnCreate(lpCreateStruct) == -1) return -1; m_imagelist.Create(16,16,ILC_MASK,6,1); m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_SERVER)); m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_HOST)); m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_COMPUTER)); m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_USER)); m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_OS)); m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_PROCESS)); m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_MEM)); m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_HOST_DISK)); // TODO: Add your specialized creation code here CTreeCtrl &tree=this->GetTreeCtrl(); tree.ModifyStyle(0,TVS_HASLINES|TVS_LINESATROOT|TVS_SHOWSELALWAYS| TVS_HASBUTTONS); tree.SetImageList(&m_imagelist,TVSIL_NORMAL); return 0; } void CPeerHostTreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here CTreeCtrl& tree=GetTreeCtrl(); HTREEITEM item; item=tree.GetSelectedItem(); TVITEM tvitem; tvitem.mask=TVIF_TEXT; tvitem.hItem=item; tvitem.pszText=ADDRESS; tvitem.cchTextMax=16; if(tree.GetItem(&tvitem)&&inet_addr(tvitem.pszText)!=INADDR_NONE) { strcpy(ADDRESS,tvitem.pszText); } if(tree.GetParentItem(item)==tree.GetRootItem()) { CMainFrame* pMainFrame=(CMainFrame*)AfxGetApp()->GetMainWnd(); CPeerOperatorTabCtrl* operatortab=&(pMainFrame->m_wndOperatorTab); ///////////////初始化注册表操作 CSplitterWnd* regeditsplitter=&(operatortab->m_splitterwndregedit); CPeerRegeditTreeView* regedittree=(CPeerRegeditTreeView*)regeditsplitter->GetPane(0,0); CPeerRegeditListView* regeditlist=(CPeerRegeditListView*)regeditsplitter->GetPane(0,1); CTreeCtrl& regtree=regedittree->GetTreeCtrl(); regtree.DeleteAllItems(); CListCtrl& reglist=regeditlist->GetListCtrl(); reglist.DeleteAllItems(); HTREEITEM root,item; TVITEM childflag; childflag.mask=TVIF_CHILDREN ; childflag.cChildren=1; root=regtree.InsertItem(ADDRESS,0,0); //////////////// item=regtree.InsertItem("HKEY_CLASSES_ROOT",1,2,root); childflag.hItem=item; regtree.SetItem(&childflag); //////////////// item=regtree.InsertItem("HKEY_CURRENT_USER",1,2,root); childflag.hItem=item; regtree.SetItem(&childflag); ///////////////// item=regtree.InsertItem("HKEY_LOCAL_MACHINE",1,2,root); childflag.hItem=item; regtree.SetItem(&childflag); ///////////////// item=regtree.InsertItem("HKEY_USERS",1,2,root); childflag.hItem=item; regtree.SetItem(&childflag); ////////////////// item=regtree.InsertItem("HKEY_CURRENT_CONFIG",1,2,root); childflag.hItem=item; regtree.SetItem(&childflag); /////////////////////////////////////////////////// /////////////文件操作初始化 CSplitterWnd* filesplitter=&(operatortab->m_splitterwndfile); CPeerFileListView* localfile=(CPeerFileListView*)filesplitter->GetPane(0,0); CPeerFileRemoteListView* remotefile=(CPeerFileRemoteListView*)filesplitter->GetPane(0,1); remotefile->m_wndToolBar.m_title.SetWindowText(ADDRESS); CString driver; CComboBoxEx* combox; CComboBoxEx* rcombox; combox=(CComboBoxEx*)&localfile->m_wndToolBar.m_driver; rcombox=(CComboBoxEx*)&remotefile->m_wndToolBar.m_driver; //adding string to the combo box COMBOBOXEXITEM comitem; comitem.mask=CBEIF_TEXT|CBEIF_IMAGE|CBEIF_SELECTEDIMAGE; comitem.cchTextMax=16; DWORD maskdriver; DWORD drivertype; char sdriver[10]; int count=0; while(CB_ERR!=combox->DeleteItem(0)); if(!(maskdriver=GetLogicalDrives())) return ; for(int i=0;i<26;i++) { if(!(maskdriver>>i)) break; if(maskdriver>>i&1) { sdriver[0]=i+'A'; sdriver[1]=':'; sdriver[2]=0; drivertype=GetDriveType(sdriver); if(drivertype==DRIVE_REMOVABLE) { comitem.iImage=0; comitem.iSelectedImage=0; } if(drivertype==DRIVE_FIXED) { comitem.iImage=1; comitem.iSelectedImage=1; } if(drivertype==DRIVE_CDROM) { comitem.iImage=2; comitem.iSelectedImage=2; } if(drivertype==DRIVE_REMOTE) { comitem.iImage=3; comitem.iSelectedImage=3; } comitem.iItem=count; count++; comitem.pszText=sdriver; combox->InsertItem(&comitem); if(strcmp(comitem.pszText,"C:")==0) { combox->SetCurSel(comitem.iItem); localfile->path="C:"; } } } count=0; ////得到远程服务器的驱动器//////////////// while(CB_ERR!=rcombox->DeleteItem(0)); WSAEVENT hevent=WSACreateEvent(); if(!hevent) { WSACloseEvent(hevent); return; } SOCKET s; COMMAND com; DRIVER remotedriver; DWORD ret; if(!PeerCreateSocket(&s,PEER_STREAM)) { WSACloseEvent(hevent); return; } if(!PeerConnectSocket(s,ADDRESS,7788)) { WSACloseEvent(hevent); closesocket(s); return; } memset(&remotedriver,0,sizeof(remotedriver)); com.CommandID=PEER_FILE_GETDRIVER; if(!PeerSendDataS(s,(char*)&com,sizeof(com),&ret,hevent)) { WSACloseEvent(hevent); closesocket(s); return; } while(PeerRecvDataS(s,(char*)&remotedriver,sizeof(remotedriver),&ret,hevent)) { if(remotedriver.drivertype==DRIVE_REMOVABLE) { comitem.iImage=0; comitem.iSelectedImage=0; } if(remotedriver.drivertype==DRIVE_FIXED) { comitem.iImage=1; comitem.iSelectedImage=1; } if(remotedriver.drivertype==DRIVE_CDROM) { comitem.iImage=2; comitem.iSelectedImage=2; } if(remotedriver.drivertype==DRIVE_REMOTE) { comitem.iImage=3; comitem.iSelectedImage=3; } comitem.iItem=count; count++; comitem.pszText=remotedriver.driver; rcombox->InsertItem(&comitem); if(strcmp(comitem.pszText,"C:")==0) { rcombox->SetCurSel(comitem.iItem); remotefile->path="C:"; } } // WSACloseEvent(hevent); closesocket(s); ///////列出文件////////////////////////// localfile->list.DeleteAllItems(); remotefile->list.DeleteAllItems(); int index=0; ////本地////// HANDLE hlocalfile; WIN32_FIND_DATA findd; CString nowdriver; combox->GetLBText(combox->GetCurSel(),nowdriver); nowdriver+="\\*"; memset(&findd,0,sizeof(findd)); int imagecount; imagecount=localfile->imagelists.GetImageCount(); for(int j=1;j<imagecount;j++) { localfile->imagelists.Remove(j); localfile->imagelistb.Remove(j); } CImageList* pSmallImage,* pBigImage; pSmallImage=localfile->list.GetImageList(LVSIL_SMALL); pBigImage=localfile->list.GetImageList(LVSIL_NORMAL); if((hlocalfile=FindFirstFile( nowdriver,&findd))==INVALID_HANDLE_VALUE) { WSACloseEvent(hevent); return ; } SHFILEINFO shfi; memset(&shfi,0,sizeof(shfi)); SHGetFileInfo(findd.cFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(shfi), SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME ); int indeximage; indeximage=pSmallImage->Add(shfi.hIcon); pBigImage->Add(shfi.hIcon); DWORD len; CTime time; char slen[30]; CString stime; index=localfile->list.GetItemCount(); localfile->list.InsertItem(index,".",0); localfile->list.SetItem(index,1,LVIF_TEXT,"文件夹",0,0,0,NULL); index=localfile->list.GetItemCount(); localfile->list.InsertItem(index,"..",0); localfile->list.SetItem(index,1,LVIF_TEXT,"文件夹",0,0,0,NULL); index=localfile->list.GetItemCount(); if(strcmp(findd.cFileName,".")!=0&& strcmp(findd.cFileName,"..")!=0) { localfile->list.InsertItem(index,findd.cFileName, findd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY?0:indeximage); localfile->list.SetItem(index,1,LVIF_TEXT,findd.dwFileAttributes& FILE_ATTRIBUTE_DIRECTORY?"文件夹":shfi.szTypeName,0,0,0,NULL); len=(findd.nFileSizeHigh*MAXDWORD+findd.nFileSizeLow)/1024; sprintf(slen,"%dK",len); localfile->list.SetItem(index,2,LVIF_TEXT,findd.dwFileAttributes& FILE_ATTRIBUTE_DIRECTORY?"":slen,0,0,0,NULL); time=findd.ftLastWriteTime; CString stime=time.Format("%Y-%m-%d %H:%M:%S"); localfile->list.SetItem(index,3,LVIF_TEXT,stime,0,0,0,NULL); } while(hlocalfile) { if(FindNextFile(hlocalfile,&findd)) { if(strcmp(findd.cFileName,".")==0|| strcmp(findd.cFileName,"..")==0) continue; memset(&shfi,0,sizeof(shfi)); SHGetFileInfo(findd.cFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(shfi), SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME ); indeximage=pSmallImage->Add(shfi.hIcon); pBigImage->Add(shfi.hIcon); index=localfile->list.GetItemCount(); localfile->list.InsertItem(index,findd.cFileName, findd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY?0:indeximage); localfile->list.SetItem(index,1,LVIF_TEXT,findd.dwFileAttributes& FILE_ATTRIBUTE_DIRECTORY?"文件夹":shfi.szTypeName,0,0,0,NULL); len=(findd.nFileSizeHigh*MAXDWORD+findd.nFileSizeLow)/1024; sprintf(slen,"%dK",len); localfile->list.SetItem(index,2,LVIF_TEXT,findd.dwFileAttributes& FILE_ATTRIBUTE_DIRECTORY?"":slen,0,0,0,NULL); time=findd.ftLastWriteTime; stime=time.Format("%Y-%m-%d %H:%M:%S"); localfile->list.SetItem(index,3,LVIF_TEXT,stime,0,0,0,NULL); } else { if(GetLastError()==ERROR_NO_MORE_FILES) break; } } FindClose(hlocalfile); /////远程////////////////// CString Mess; Mess="返回目录:\"" +remotefile->path+"\" 的所有文件信息!"; if(!PeerCreateSocket(&s,PEER_STREAM)) { Message(Mess.GetBuffer(Mess.GetLength()),"失败"); WSACloseEvent(hevent); return; } if(!PeerConnectSocket(s,ADDRESS,7788)) { Message(Mess.GetBuffer(Mess.GetLength()),"失败"); WSACloseEvent(hevent); closesocket(s); return; } pSmallImage=remotefile->list.GetImageList(LVSIL_SMALL); pBigImage=remotefile->list.GetImageList(LVSIL_NORMAL); com.CommandID=PEER_FILE_GETATTRIB; if(!PeerSendDataS(s,(char*)&com,sizeof(com),&ret,hevent)) { Message(Mess.GetBuffer(Mess.GetLength()),"失败"); WSACloseEvent(hevent); closesocket(s); return; } FILEATTRIB fileattrib; rcombox->GetLBText(rcombox->GetCurSel(),nowdriver); nowdriver+="\\*"; strcpy(fileattrib.filename,nowdriver); if(!PeerSendDataS(s,(char*)&fileattrib,sizeof(fileattrib),&ret,hevent)) { Message(Mess.GetBuffer(Mess.GetLength()),"失败"); WSACloseEvent(hevent); closesocket(s); return; } index=remotefile->list.GetItemCount(); remotefile->list.InsertItem(index,".",0); remotefile->list.SetItem(index,1,LVIF_TEXT,"文件夹",0,0,0,NULL); index=remotefile->list.GetItemCount(); remotefile->list.InsertItem(index,"..",0); remotefile->list.SetItem(index,1,LVIF_TEXT,"文件夹",0,0,0,NULL); index=remotefile->list.GetItemCount(); while(PeerRecvDataS(s,(char*)&fileattrib,sizeof(fileattrib),&ret,hevent)) { SHGetFileInfo(fileattrib.filename, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(shfi), SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME ); indeximage=pSmallImage->Add(shfi.hIcon); pBigImage->Add(shfi.hIcon); index=remotefile->list.GetItemCount(); remotefile->list.InsertItem(index,fileattrib.filename, strcmp(fileattrib.attrib,"文件夹")==0?0:indeximage); remotefile->list.SetItem(index,1,LVIF_TEXT,fileattrib.attrib,0,0,0,NULL); remotefile->list.SetItem(index,2,LVIF_TEXT,fileattrib.len,0,0,0,NULL); remotefile->list.SetItem(index,3,LVIF_TEXT,fileattrib.time,0,0,0,NULL); } Message(Mess.GetBuffer(Mess.GetLength()),"成功"); WSACloseEvent(hevent); closesocket(s); } *pResult = 0; }